﻿using Kaskelot.SP.Core;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using Stockholm.SOA.Kaskelot.WCF.ServiceContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaskelot.SP.Model.Client;
using System.ServiceModel;
using Stockholm.SOA.Kaskelot.WCF.FaultContracts;

namespace Kaskelot.SP.Services
{
    public class TodoService : BaseService<IKaskelotService>
    {
        public ClientHandelseLogg[] GetByggnadHandelseLoggTodo()
        {
            List<ClientHandelseLogg> todos = new List<ClientHandelseLogg>();

            try
            {
                ByggnadHandelseLogg[] byggnadTodos = this.channel.GetByggnadHandelseLoggTodo(ApplicationContext.Current.Val.Id);
                foreach (ByggnadHandelseLogg byggnadHandelse in byggnadTodos)
                {
                    todos.Add(new ClientHandelseLogg
                    {
                        Text = byggnadHandelse.Text,
                        Datum = byggnadHandelse.Datum.ToShortDateString(),
                        SourceId = byggnadHandelse.ByggnadId,
                        SourceNamn = byggnadHandelse.ByggnadNamn,
                        AtgardBegard = byggnadHandelse.Andrad.HasValue ? byggnadHandelse.Andrad.Value.ToShortDateString() : byggnadHandelse.Skapad.ToShortDateString(),
                        AtgardBegardAv = byggnadHandelse.AndradAv != null && byggnadHandelse.AndradAv != string.Empty ? byggnadHandelse.AndradAv : byggnadHandelse.SkapadAv,
                    });
                }
            }
            catch (FaultException<ErrorInformation> ex)
            {
                Logger.LogError(this, LayerNames.Services, "GetByggnadHandelseLoggTodo", "Error getting the list of todos", ex);
                throw;
            }

            return todos.ToArray();
        }

        public ClientHandelseLogg[] GetPersonHandelseLoggTodo()
        {
            List<ClientHandelseLogg> todos = new List<ClientHandelseLogg>();

            try
            {
                PersonHandelseLogg[] personTodos = this.channel.GetPersonHandelseLoggTodo(ApplicationContext.Current.Val.Id);
                foreach (PersonHandelseLogg personHandelse in personTodos)
                {
                    todos.Add(new ClientHandelseLogg
                    {
                        Text = personHandelse.Text,
                        Datum = personHandelse.Datum.ToShortDateString(),
                        SourceId = personHandelse.PersonId,
                        SourceNamn = personHandelse.PersonNamn,
                        AtgardBegard = personHandelse.Andrad.HasValue ? personHandelse.Andrad.Value.ToShortDateString() : personHandelse.Skapad.ToShortDateString(),
                        AtgardBegardAv = personHandelse.AndradAv != null && personHandelse.AndradAv != string.Empty ? personHandelse.AndradAv : personHandelse.SkapadAv,
                    });
                }
            }
            catch (FaultException<ErrorInformation> ex)
            {
                Logger.LogError(this, LayerNames.Services, "GetPersonHandelseLoggTodo", "Error getting the list of todos", ex);
                throw;
            }

            return todos.ToArray();
        }

        public IEnumerable<BlankettPost> GetBlankettPosterTodo(string blankett)
        {
            List<BlankettPost> blankettPoster = new List<BlankettPost>();

            try
            {
                blankettPoster = this.channel.GetInkomnaBlankettPoster(ApplicationContext.Current.Val.Id, blankett).ToList();
                return blankettPoster;
            }
            catch (FaultException<ErrorInformation> ex)
            {
                Logger.LogError(this, LayerNames.Services, "GetBlankettPosterTodo", "Error getting the list of todos", ex);
                throw;
            }

        }
    }
}
